// 网络请求工具
import axios from 'axios'
import auth from '@/utils/auth'
import router from '@/router'

// 创建一个新的axios实例，进行配置。（好处：搞多个axios实例对接多个服务）
// 将来所有的配置都在instance进行，使用也是使用个实例它也axios
const instance = axios.create({
  baseURL: 'http://geek.itheima.net/',
  timeout: 5000
})

// 添加请求拦截器
instance.interceptors.request.use(config => {
  // 发请求前就会执行
  // config 请求配置
  // 对config进行修改
  const token = auth.getToken()
  if (token) config.headers.Authorization = `Bearer ${token}`
  return config
}, err => {
  // 当前一个函数报错的时候
  // 一定需要返回一个错误的promise对象
  return Promise.reject(err)
})

// 添加响应拦截器
instance.interceptors.response.use(res => res, err => {
  // 当后台报错且状态码401，代表：登录失效或者未登录
  if (err.response && err.response.status === 401) {
    // 删除无效token
    auth.delToken()
    // 跳转登录页面
    // this.$router.push('/login') 这里的this不是vue实例不能使用$router
    // location.href = '/#/login' 切换地址，这个很粗暴，导致router的某些功能失效
    // 其实 router/index.js 导出的router实例，挂载到vue上就是$router
    router.push('/login')
  }
  return Promise.reject(err)
})

// 导出新的axios
export default instance
